<?php
/**
 * 本地文件处理类
 * @author Nintendov
 */

namespace App\Service\Ueditor\Vin\FileStorage\Driver;

use App\Service\Ueditor\Vin\FileStorage;

class File extends FileStorage
{
    /**
     * 本地写文件
     */
    public function put($rootpath, $filename, $content, $maxSize = -1, $cover = true)
    {
        $filename = '.'.$rootpath.$filename;
        if($maxSize != -1){
            if(strlen($content > $maxSize)){
                return '文件大小超过限制';
            }
        }
        $dir = dirname($filename);
        if(!is_dir($dir))
            mkdir($dir, 0755, true);
        if(false === file_put_contents($filename, $content)){
            E(L('_STORAGE_WRITE_ERROR_').':'.$filename);
        } else{
            $this->contents[$filename] = $content;

            return true;
        }
    }

    /**
     * 遍历获取目录下的指定类型的文件
     * @param $path
     * @param array $files
     * @return array
     */

    public function listFile($rootpath, $path, $allowFiles = 'all')
    {
        $path = $_SERVER['DOCUMENT_ROOT'].__ROOT__."/".$rootpath.$path;

        return $this->getList($path, $allowFiles);
    }

    public function getList($path, $allowFiles = 'all', &$files = array())
    {
        if(!is_dir($path)) return null;
        if(substr($path, strlen($path) - 1) != '/') $path .= '/';
        $handle = opendir($path);
        while(false !== ($file = readdir($handle))){
            if($file != '.' && $file != '..'){
                $path2 = $path.$file;
                if(is_dir($path2)){
                    $this->getList($path2, $allowFiles, $files);
                } else{
                    if($allowFiles != 'all'){
                        if(preg_match("/\.(".$allowFiles.")$/i", $file)){
                            $files[] = array(
                                'url'   => $this->transPath(substr($path2, strlen($_SERVER['DOCUMENT_ROOT']))),
                                'mtime' => filemtime($path2),
                            );
                        }
                    } else{
                        $files[] = array(
                            'url'   => $this->transPath(substr($path2, strlen($_SERVER['DOCUMENT_ROOT']))),
                            'mtime' => filemtime($path2),
                        );
                    }
                }
            }
        }

        return $files;
    }

    /**
     * 得到路径
     */
    public function getPath($rootpath, $path)
    {
        $path = __ROOT__.$rootpath.$path;

        return $path;
    }

    /**
     *  转换路径
     */
    public function transPath($file)
    {
        return str_replace("/../../cdn", "https://slh.caitongnews.com", $file);
    }
}
